package br.com.clubelivro.mb;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.clubelivro.bo.iface.IClubeLivroBO;
import br.com.clubelivro.modelo.Pagamento;
import br.com.gaspar.utils.ColecaoUtil;
import br.com.gaspar.utils.DataUtil;
import br.com.gaspar.utils.entidade.EntidadeBase;
import br.com.gaspar.utils.exception.BaseException;

@ManagedBean(name="RelatorioMB")
@ViewScoped
public class RelatorioMB implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@EJB
	private IClubeLivroBO<EntidadeBase> bo;
	
	private Integer mes;
	
	private Integer ano;
	
	private BigDecimal valorTotal;
	
	private List<EntidadeBase> pagamentos;
	
	@PostConstruct
	public void iniciar(){
		setValorTotal(BigDecimal.ZERO);
		ano = DataUtil.getAno(new Date());
	}
	
	public void pesquisar(){
		if(getAno() != null){
			setValorTotal(BigDecimal.ZERO);
			if(getMes() != null){
				try {
					pagamentos = bo.buscarTodosPorNamedQuery("Pagamento.buscarListaPorMesAno", new Object[]{getMes(), getAno()});
				} catch (BaseException e) {
					e.printStackTrace();
				}
			}else{
				try {
					pagamentos = bo.buscarTodosPorNamedQuery("Pagamento.buscarListaPorAno", ano);
				} catch (BaseException e) {
					e.printStackTrace();
				}
			}
		}else{
			FacesMessage message = new FacesMessage(
					FacesMessage.SEVERITY_ERROR,
					"Obrigatório informar o ano!", null);
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
		
	if(!ColecaoUtil.ehNuloOuVazio(getPagamentos())){
		for (EntidadeBase item : getPagamentos()) {
			Pagamento pag = (Pagamento) item;
			setValorTotal(getValorTotal().add(pag.getValor()));
		}
	}
		
	}

	public Integer getMes() {
		return mes;
	}

	public void setMes(Integer mes) {
		this.mes = mes;
	}

	public Integer getAno() {
		return ano;
	}

	public void setAno(Integer ano) {
		this.ano = ano;
	}

	public List<EntidadeBase> getPagamentos() {
		return pagamentos;
	}

	public void setPagamentos(List<EntidadeBase> pagamentos) {
		this.pagamentos = pagamentos;
	}

	public BigDecimal getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(BigDecimal valorTotal) {
		this.valorTotal = valorTotal;
	}
}
